<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>GROOPS - Loops and conditions</title>

    <!-- JQuery and Popper -->
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>

    <!-- Bootstrap -->
    <!-- https://getbootstrap.com/docs/4.1/examples/ -->
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">

    <!-- Mathjax -->
    <script type="text/x-mathjax-config">
    MathJax.Hub.Config({tex2jax: {inlineMath: [ ['$','$'] ],
                                  displayMath: [ ["\\[","\\]"] ],
                                  processEscapes: true},
                        TeX:     {Macros: {M: ["{\\mathbf #1}",1]},
                                  equationNumbers: {autoNumber: "all"}  }});
    </script>
    <script async src="https://cdn.jsdelivr.net/npm/mathjax@2.7.7/MathJax.js?config=TeX-AMS_CHTML" integrity="sha384-e/4/LvThKH1gwzXhdbY2AsjR3rm7LHWyhIG5C0jiRfn8AN2eTN5ILeztWw0H9jmN" crossorigin="anonymous"></script>

    <!-- lunr -->
    <script src="https://cdn.jsdelivr.net/npm/lunr@2.3.8/lunr.min.js" integrity="sha384-vRQ9bDyE0Wnu+lMfm57BlYLO0/XauFuKpVsZPs7KEDwYKktWi5+Kz3MP8++DFlRY" crossorigin="anonymous"></script>

    <!-- Mustache -->
    <script src="https://cdn.jsdelivr.net/npm/mustache@4.0.1/mustache.min.js" integrity="sha384-0PLEZVBpOQ+Kqw3anJWSNWvRxpEFt02tSpBvyRsA4WcvX/OTldWdXxGLVLvh954H" crossorigin="anonymous"></script>

    <!-- GROOPS Stylesheet -->
    <link rel="stylesheet" href="static/groops.css"/>

    <!-- icon -->
    <link rel="icon" href="static/groops_icon.png">

</head>
<body>
    <header>
        <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
            <div class="container">
              <a class="navbar-brand" href="index.html"><img class="logo" src="static/groops_white.svg"></a>
              <div class="collapse navbar-collapse" id="mainNavbar">
                <ul class="navbar-nav mr-auto">
                  <li class="nav-item">
                    <a class="nav-link" href="programType.html">Programs</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="classes.html">Classes</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="general.parser.html">Parser</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="general.fileFormat.html">File Formats</a>
                  </li>
                </ul>
              </div>
                <form class="form-inline my-2 my-lg-0" action="search.html" id="searchTools">
                  <input class="form-control mr-sm-2" placeholder="Search" name="searchTerms" method="GET" value="" type="text" id="searchBox">
                  <button class="btn btn-secondary my-2 my-sm-0" type="submit" id="searchButton">Search</button>
                </form>
              <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainNavbar" aria-controls="mainNavbar" aria-expanded="false" aria-label="Toggle navigation" style="">
                <span class="navbar-toggler-icon"></span>
              </button>
            </div>
        </nav>
    </header>
    <main class="container px-0 pt-2 top-buffer">
        <div id="content" class="container">
            <h1 id="general.loopsAndConditions">Loops and conditions</h1><p>
The program flow within a config file can be controlled by the classes <a class="groops-class" href="loopType.html">loop</a>
and <a class="groops-class" href="conditionType.html">condition</a>. The easiest way to access these classes is with the programs
<a class="groops-program" href="LoopPrograms.html">LoopPrograms</a> and <a class="groops-program" href="IfPrograms.html">IfPrograms</a>.</p><p>The programs defined in <a class="groops-program" href="IfPrograms.html">IfPrograms</a> are only executed if the defined
<a class="groops-class" href="conditionType.html">condition</a> is met. A typical example is to check whether a file that
should have been created in previous programs actually exists. Further options are string comparisons and
checking the result of a numerical expression or the return value of an external command.</p><p>With <a class="groops-program" href="LoopPrograms.html">LoopPrograms</a> it is possible to repeat the programs defined inside within a loop.
The class <a class="groops-class" href="loopType.html">loop</a> creates a sequence to loop over and defines <a class="groops-ref" href="general.parser.html">variables</a>
that contain the index and element for the current iteration.</p><p>The <a class="groops-class" href="loopType.html">loop</a> and <a class="groops-class" href="conditionType.html">condition</a> can also be attributed to single
config elements (including programs). Config elements with an assigned loop are repeated, with the loop variables
being evaluated for each element. If a <a class="groops-class" href="conditionType.html">condition</a> is attributed to a config element
in addition to a loop, each element within the loop is only created if the condition is met. Conditions can also
be attributed to optional elements without an associated loop.
If the condition is not met, the optional element will be treated as if it was not provided.</p><p>Example: A program needs all files in a download directory as input.
All the <strong class="groops-config-element">inputfile</strong>s can be selected manually of course, but it is much easier to assign
a loop variable with <strong class="groops-config-element">inputfile</strong>=<code>{loopFile}</code> and attribute a
<a class="groops-class" href="loopType.html#directoryListing">loop:directoryListing</a>.
The loop lists the content of the download directory and assigns each file name to the
<strong class="groops-config-element">variableLoopFile</strong>=<code>loopFile</code>.
</p>

        </div>
    </main>
</body>
</html>
